Network packet routers use buffer management techniques to share limited buffer space between various incoming data ports and classes of data packets. Typically, the packets are divided into cells that are managed by a set of queues. Packets from multiple ports are en-queued to multiple queues based on their classified priority and de-queued based on available bandwidth of the shared output port(s). Often the available output bandwidth is less than in aggregate input bandwidth and packets must be dropped because there is limited shared buffer memory. If there is efficient buffer management of the shared buffer memory, overall loss performance, as well as fairness between ports, can be improved. However, there are many restrictions on implementing a buffer management scheme. The hardware implementing the management must operate at the rate of the incoming packets, and this rate approaches the maximum rate that can be realized using current memory technology.
Routers use buffer allocation techniques to share limited buffer space between various incoming data ports and classes of data packets. Packets from multiple ports are en-queued to multiple queues based on their classified priority and de-queued based on available bandwidth of the shared output port(s). Under varying traffic conditions, it is desirable to allocate more buffer space to some ports if the buffer space is not needed by other ports. This situation may occur because there is low traffic on the other ports. However, when these low traffic ports face higher traffic, the ports that where using extra buffers should be the first to have their traffic dropped in order to be fair. Also, packets from the ports have different priorities, and thus dropping decision must take these priorities into account when determining which packets to drop. Accordingly, a fair method of arbitration is needed to determine which packets should be dropped while realizing the inherent hardware limitations of high-speed routers.